package com.kylefu.design.pattern.decorator;

/**
 * 装饰（Decorator）模式：动态的给对象增加一些职责，即增加其额外的功能。
 * 原理：增加一个修饰类包裹原来的类，包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数。
 * 装饰类实现新的功能，但是，在不需要用到新功能的地方，它可以直接调用原来的类中的方法。修饰类必须和原来的类有相同的接口。
 */
public class DecoratorExample {

  public static void main(String[] args){
    BlueCar blueCar = new BlueCar();
    blueCar.drawColor();
    System.out.println("-----------");

    BlueCarDecorator blueCarDecorator = new BlueCarDecorator(blueCar);
    blueCarDecorator.drawColor();
    System.out.println("-----------");

    RedCarDecorator redCarDecorator = new RedCarDecorator(blueCarDecorator);
    redCarDecorator.drawColor();
  }
}
